package com.zpark.se.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Map是一个接口：该接口常用的实现类有HashMap和TreeMap
 * 语法：
 *      Map<k, v>
 *          k：键的类型，可以是任意对象类型
 *          v：值的类型，可以是任意对象类型
 *
 *
 * Map 是一种键-值对（key-value）集合，Map 集合中的每一个元素都包含一个键（key）对象
 * 和一个值（value）对象。用于保存具有映射关系的数据
 */
public class Demo01 {
    public static void main(String[] args) {
        // 创建map集合对象
        Map<String, String> map = new HashMap<>();
        HashMap<String, Object> map1 = new HashMap<>();
        Map m1 = new HashMap();

        // map集合常用方法
        /*
        * void clear() 清空集合
         */
        map.clear();

        /*
        * V compute(K key,BiFunction<? super K,? super V,? extends V>
        remappingFunction)
         */
        // map.compute()

        /*
        * V put(K key,V value)：将指定的键值对添加到map集合当中
         */
        String put = map.put("dc", "大锤");
        System.out.println(put);

        // 修改map的键值对
        String put1 = map.put("dc", "小锤");
        System.out.println(put1);

        /*
        * boolean containsKey(Object key)：判断集合中是否包含指定的key
         */
        boolean dc = map.containsKey("dc");

        /*
        * boolean containsValue(Object value)：判断集合中是否包含指定的value
         */
        boolean val = map.containsValue("小锤");

        /*
        * Set<Map.Entry<K,V>> entrySet()：将map集合转换为set集合
         */
        Set<Map.Entry<String, String>> set = map.entrySet();

        /*
        * void forEach(BiConsumer<? super K,? super V> action)：遍历集合
         */
        map.forEach((k,v)-> System.out.println(k+"-->"+v));

        /*
        * V get(Object key)：根据指定的key获取value值
         */
        String s = map.get("dc");

        /*
        * V getOrDefault(Object key,V defaultValue)：根据key获取value值，
        * 如果key没有对应的value，则返回指定的默认值
         */
        String orDefault = map.getOrDefault("dc", "小锤");

        /*
        * boolean isEmpty()：判断集合是否为空
         */
        boolean empty = map.isEmpty();

        /*
        * Set<K> keySet()：获取所有的key，存储到set集合中
         */
        Set<String> keySet = map.keySet();

        /*
        * V putIfAbsent(K key,V value)：如果key不存在，则添加键值对，
        * 如果key存在，则不添加
         */
        String s1 = map.putIfAbsent("dc", "大锤");

        /*
        * V remove(Object key)：根据指定的key删除键值对
         */
        String dc1 = map.remove("dc");

        /*
        * V replace(K key,V value)：根据指定的key替换键值对
         */
        String replace = map.replace("dc", "大锤");

        /*
        * Collection<V> values()：获取所有的value，存储到Collection集合中
         */
        Collection<String> values = map.values();
    }
}
